﻿using System;
using System.Text;

namespace MyORM
{
    /// <summary>
    /// 数据字段名绑定信息
    /// </summary>
    /// <remarks>
    /// 本特性用于标记某个属性映射到指定名称的字段上，可以指定字段名，
    /// 若不指定则认为属性的名称就是影射的字段名。
    /// 本特性只能用于公开属性上面，不能用于其它类型成员或类型声明上面。
    /// 编写 袁永福
    /// </remarks>
    [System.AttributeUsage(System.AttributeTargets.Property, AllowMultiple = false)]
    public class BindFieldAttribute : System.Attribute
    {
        /// <summary>
        /// 初始化对象
        /// </summary>
        public BindFieldAttribute()
        {
        }

        /// <summary>
        /// 初始化对象
        /// </summary>
        /// <param name="name">字段名</param>
        public BindFieldAttribute(string name)
        {
            strName = name;
        }

        private string strName = null;
        /// <summary>
        /// 数据字段名
        /// </summary>
        public string Name
        {
            get
            {
                return strName;
            }
        }

        private bool bolKey = false;
        /// <summary>
        /// 该字段为关键字段，可用作查询条件
        /// </summary>
        /// <remarks>
        /// 框架程序在修改和删除对象时，对象类型必须至少有一个属性标记为Key = true .
        /// </remarks>
        public bool Key
        {
            get
            {
                return bolKey;
            }
            set
            {
                bolKey = value;
            }
        }

        private string strReadFormat = null;
        /// <summary>
        /// 数据读取格式化字符串
        /// </summary>
        /// <remarks>
        /// 本属性用于指定数据库中的数据存储格式，比如数据库中保存的是类似"20080603"
        /// 这样的表示日期数据的格式为"yyyyMMdd"的字符串。此时设置对象属性的ReadFormat
        /// 格式为"yyyyMMdd",并且对象属性的数据类型为DateTime类型。则框架读取数据时会
        /// 尝试使用"yyyyMMdd"格式解析读取的原始数据为一个日期数据并设置到对象属性值。
        /// </remarks>
        public string ReadFormat
        {
            get
            {
                return strReadFormat;
            }
            set
            {
                strReadFormat = value;
            }
        }

        private string strWriteFormat = null;
        /// <summary>
        /// 数据存储格式化字符串
        /// </summary>
        /// <remarks>
        /// 本属性用于指定对象属性值保存到数据库中的格式，比如对象属性数据类型为DateTime，
        /// 而数据库中保存的是类似"20080603"这样的表示日期数据的格式为"yyyyMMdd"的字符串。
        /// 此时设置对象属性的WriteFormat格式为"yyyyMMdd",则框架保存数据时会尝试使用
        /// "yyyyMMdd"格式将对象属性值进行格式化，将转化结果保存到数据库中。
        /// </remarks>
        public string WriteFormat
        {
            get
            {
                return strWriteFormat;
            }
            set
            {
                strWriteFormat = value;
            }
        }
    }//public class BindFieldAttribute : System.Attribute
}